﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
using com.clinica.business.BE.gesliq;
using com.clinica.business.BL.interfaces.gesliq;
using com.clinica.DL.sql.gesliq;
using com.clinica.business.entities;


namespace com.clinica.business.BL.gesliq
{
    [ServiceBehavior(Name = "PacienteBL",
    Namespace = "http://com.clinica.business.BL.interfaces.gesliq",
    ConcurrencyMode = ConcurrencyMode.Multiple,
    InstanceContextMode = InstanceContextMode.PerSession,
    IncludeExceptionDetailInFaults = true)]
    public class PacienteBL : IPacienteBL
    {
        #region IPacienteBL Members

        public List<PacienteBE> BuscarPaciente(PacienteBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PacienteBE> lstPaciente = new List<PacienteBE>();
            List<ParametrosBE> lstParametro = new List<ParametrosBE>();
            ParametrosBE oParm = new ParametrosBE();
            try
            {
                bool bolValida = false;
                switch (request.TipoBusqueda)
                { 
                    case 1:
                        if (request.NumeroDocumento.Trim() != string.Empty)
                            request.NumeroDocumento = string.Empty;
                        bolValida = true;
                        break;
                    case 2:
                        if (request.ApellidoMaterno.Trim() != string.Empty)
                            request.ApellidoMaterno = string.Empty;
                        if (request.ApellidoPaterno.Trim() != string.Empty)
                            request.ApellidoPaterno = string.Empty;
                        if (request.Nombre.Trim() != string.Empty)
                            request.Nombre = string.Empty;
                        bolValida = true;
                        break;
                }
                if (bolValida)
                {
                    lstPaciente = PacienteDL.BuscarPaciente(request);
                    oParm.NombreTabla="TIPDOC";
                    lstParametro = ParametrosDL.ObtenerTabla(oParm);
                }
                foreach(PacienteBE var in lstPaciente)
                {
                    var.NombreCompleto = var.ApellidoPaterno + " " + var.ApellidoMaterno + " " + var.Nombre;
                    foreach (ParametrosBE var1 in lstParametro)
                    {
                        if (var.TipoDocumento == var1.Codigo)
                        {
                            var.DescripcionTipoDocumento = var1.DescripcionCorta.Trim();
                            break;                        
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
                //new ErrorSGC(1,ex.Message)
            }
            return lstPaciente;
        }

        public List<PacienteBE> BuscarPacienteDetalle(PacienteBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PacienteBE> lstPaciente = new List<PacienteBE>();
            try
            {
                PacienteBE oPac = new PacienteBE();
                oPac = PacienteDL.BuscarPacientePorCodigo(request);
                lstPaciente = PacienteDL.BuscarPacienteDetalle(request);
                if (lstPaciente.Count > 0)
                {
                    foreach (PacienteBE item in lstPaciente)
                    {
                        item.NumeroDocumento = oPac.NumeroDocumento;
                        item.ApellidoPaterno = oPac.ApellidoPaterno;
                        item.ApellidoMaterno = oPac.ApellidoMaterno;
                        item.Nombre = oPac.Nombre;
                        item.NombreCompleto = oPac.Nombre + " " + oPac.ApellidoPaterno + " " + oPac.ApellidoMaterno;
                    }
                }
                else
                    lstPaciente.Add(oPac);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
                //new ErrorSGC(1,ex.Message)
            }
            return lstPaciente;
        }
        #endregion



        #region IPacienteBL Members


        public List<PacienteBE> BuscarPacientePorCodigo(PacienteBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PacienteBE> lstPaciente = new List<PacienteBE>();
            try
            {
                PacienteBE oPac = new PacienteBE();
                oPac = PacienteDL.BuscarPacientePorCodigo(request);
                lstPaciente.Add(oPac);                
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
                //new ErrorSGC(1,ex.Message)
            }
            return lstPaciente;
        }

        #endregion
    }
}
